from openai import OpenAI
from globle import configs as cfg
client = OpenAI(api_key=cfg.DEEPSEEK_API_KEY, base_url="https://api.deepseek.com")
from tqdm import tqdm
import pandas as pd
import json
tqdm.pandas()

'''
需求：基于LLM文本分类, 并测一下准确率
步骤:
1. 把LLM接口封装成一个方法，传入文本
2. 加载数据
3. 遍历数据调用LLM分类
提示：tqdm.pandas()之后把df[X].apply()换成df.progress_apply()可显示进度条
4. 计算准确率
5. 保存新数据
'''

# 1. 把LLM接口封装成一个方法，传入文本
def classification(text):
    system_prompt = '''
        你是一个情感分类的助手，请判断我的评论情感上属于正面评论还是负面评论,以json返回，字段：
        - label: 1是正面评论 0是负面评论
    '''
    completion = client.chat.completions.create(
        model="deepseek-chat",
        messages=[
            {"role":"system","content":system_prompt},
            {"role":"user","content":text}
        ],
        response_format={"type":'json_object'}, # 以json返回
        temperature=0.5,
        max_tokens=12
    )
    json_str = completion.choices[0].message.content
    r = json.loads(json_str)
    return r['label']

# 2. 加载数据
df = pd.read_csv('test.csv')
# 3. 遍历数据调用LLM分类
df['pred_label']=df['text'].progress_apply(classification)
# 4. 计算准确率
acc = (df['label']==df['pred_label']).mean()
print(f"准确率: {acc:.3f}")
# 5. 保存新数据
df.to_csv('test_pred.csv', index=False)